import java.util.Arrays;

/**
 * 头、尾、中间插入元素
 */
public class Demo03 {

  public static void main(String[] args) {
    int[] arr = {11, 22, 33};
    System.out.println(Arrays.toString(arr));//11,22,33
    arr = addTop(arr, 44);
    System.out.println(Arrays.toString(arr));//44,11,22,33
    arr = addLast(arr, 55);
    System.out.println(Arrays.toString(arr));//44,11,22,33,55
    arr = add(arr, 66, 2);
    System.out.println(Arrays.toString(arr));//44,11,66,22,33,55


  }


  /**
   * 在某个索引位置前面插入元素
   *
   * @param arr
   * @param newValue
   * @param index
   * @return
   */
  public static int[] add(int[] arr, int newValue, int index) {
    int[] newArr = new int[arr.length + 1];
    if (index == 0) {//头部插入
      newArr[0] = newValue;
      System.arraycopy(arr, 0, newArr, 1, arr.length);
    } else if (index == arr.length) {//尾部插入
      newArr[newArr.length - 1] = newValue;
      System.arraycopy(arr, 0, newArr, 0, arr.length);
    } else {//中间插入
      newArr[index] = newValue;
      System.arraycopy(arr, 0, newArr, 0, index);
      System.arraycopy(arr, index, newArr, index+1, arr.length-index);
    }
    return newArr;
  }

  /**
   * 尾部插入元素
   *
   * @param arr
   * @param newValue
   * @return
   */
  public static int[] addLast(int[] arr, int newValue) {
    return add(arr, newValue, arr.length);
  }

  /**
   * 头部插入元素
   *
   * @param arr
   * @param newValue
   * @return
   */
  public static int[] addTop(int[] arr, int newValue) {
    return add(arr, newValue, 0);
  }
}
